-
-
Notifications
You must be signed in to change notification settings - Fork 40.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Cirque Pinnacle usability updates #17098
Conversation
Pinnacle scans at 100sps by default, up to 300sps with certain features disabled. POINTING_DEVICE_TASK_THROTTLE_MS is 1 by default, so Pinnacle is polled at 1KHz when pointing device motion pin is not available e.g. with SPLIT_POINTING_ENABLE Check Pinnacle's software data ready bit from status register instead of forcing data reads in this situation. Trackpad spazzes out otherwise.
From Cirque's sample code, ADC attenuation set to: 2X for thick plastic curved overlay 4X for thin flat overlay Just a basic setting for usability at the moment. Additional features could be introduced in the future such as a Z-value look-up table for hover rejection.
FEEDCONFIG_3 is also used for other settings such as noise avoidance and palm rejection, which need to be disabled to raise report rate above 100sps. Revisit if those features are added.
For those that prefer to use a key for clicks.
Baseline should be recaptured after changing ADC attenuation, since the initial calibration may have been performed with different settings on power up. TODO: Import register definitions from AnyMeas_Example/Pinnacle.h
Duration for these operations undocumented (does somebody know?) At least let them terminate rather than freeze up the keyboard when trackpad is disconnected. TODO: Do early return based on touch_init as well, or instead of this.
b07a16e
to
4623565
Compare
This got labeled as core. Should pointer related PRs target |
@dkao great to see other people improving the pinnacle trackpads! Is the smoothing actually applicable in absolute mode? Reading the docs, I think it only applies to relative mode? |
@Kriechi Uh oh! |
@dkao luckily, I referenced all docs in my PR so in the future others can discover it more easily:
How about we base our PRs on top of each other? The SoftwareData Ready is already covered in mine, and the Hardware Data Ready would be something new in yours - although I'm not sure if it brings any benefit? Pinnacle at most gives new data every 10ms, so interrupt-driven would just add more complexity and requires an extra (useless?) pin... happy to hear about your real-life experience if you are using it? About calibration, I don't think we need to explicitly call this:
Looking forward to your circular scrolling! That sounds super interesting! |
@Kriechi So there's a filtering disable bit in FeedConfig1 and a separate smoothing disable bit in FeedConfig3, bit 1. Filtering disable likely refers to filters on the capacitive image itself before coordinates are computed, and smoothing disable refers to a smoothing filter applied to the computed coordinates.
Hardware data ready pin is already handled in QMK by qmk_firmware/quantum/pointing_device.c Lines 239 to 244 in 9475530
I think it's better for the caller to check for data readiness as needed, rather than have cirque_pinnacle_read_data() send fake reports potentially throwing off caller logic (such as the tap code checking touchData.touchDown ).
We do if changing ADC attenuation, the controller doesn't automatically recalibrate. Let's work on your PR first, I'll rebase my stuff on top of that. |
Description
Some basic usability updates for the Cirque Pinnacle circle trackpad.
SPLIT_POINTING_ENABLE
)Types of Changes
Issues Fixed or Closed by This PR
Checklist